#!/bin/bash

Info="\n 此脚本用于创建本地仓库，连接远程仓库，代码更新.....\n \
		--By Resppate(@南宫子萍)\n \
		QQ:2085827949 (^_^)\n"
		
UPDATA_INFO="--By Resppate(@南宫子萍)"


#################################################
#	克隆远程仓库
#################################################
function chengRemote()
{	
	# 默认用户名与仓库
	USER_NAME="Respate"
	USER_EMAIL="2085827949@qq.com"
	HTTPS="https://gitee.com/respate/stc51-engineering-template.git"	#远程仓库(云端项目)

	# 仓库地址选项
	if [ -z ${1} ]; then 
		echo "use default Remoute"

	# 公司用户名与仓库
	elif [ ${1} == "icmax" ]; then
		USER_NAME="Hawke"
		USER_EMAIL="hawke@icmax.com.cn"
		HTTPS="http://192.168.200.76:8000/ae1/nxp_imx8m_ddr_test.git"	#远程仓库(云端项目)
	fi

	# 1.设置用户名与邮箱
	git config --global user.name ${USER_NAME}
	git config --global user.email ${USER_EMAIL}

	# 2.移除https的方式，换成 ssh方式
	git remote rm origin

	# 3 复制ssh地址 并修改本地地址：git remote add origin git地址
	git remote add origin ${HTTPS}

	# 4.输出打印信息
	git config --global user.name 
	git config --global user.email
	git remote -v
	echo "arg $1:chenge remote ok!"
}


#################################################		
#	创建仓库
#################################################
function CreateRepository()
{
	git init										#初始化仓库(创建了一个空的本地仓库)
	git remote add origin "Respate@lap.com"			#将本地的库链接到远程库
	# git add .						
	# git pull origin master -f		#	强制推送
	echo "本地仓库创建成功......."
}

#################################################
#	更新代码
#################################################
function update()
{
	echo "开始向远程仓库更新文件...."

	# 先要清除缓存文件，使.gitignore生效
	# git rm -r --cached .

	echo "将工作区中所有未跟踪或者修改的文件添加到暂存区"
	git add .
	
	echo "将暂存区里的改动给提交到本地的版本库"
	if [ $# != 1 ]; then
		echo ""
		echo "请输入提交信息:"
		read UPDATA_INFO
		git commit -m "${UPDATA_INFO}"
	else
		git commit -m "${1}"
	fi
	echo "上传本地当前分支代码到master分支"
	git push origin master -f		#	强制推送

	echo "远程仓库连接成功，数据更新完成......."
	echo "提交信息: ${1}"
}


#################################################
#	更新代码到所有仓库
#################################################
function updateAll()
{
	# 1.获取提交信息
	echo ""
	echo "请输入提交信息:"
	read UPDATA_INFO

	# 2.提交代码到gitlab
	# chengRemote "icmax" ;
	# update "${UPDATA_INFO}";

	# 3.提交代码
	chengRemote ;
	update "${UPDATA_INFO}";
}

#################################################
#	克隆远程仓库
#################################################
function cloen()
{	
	echo "从远程主机克隆一个版本库"
	echo "请输入远程仓库的地址:"
	read url
	git clone ${url}
	echo "克隆完成......"
}



#帮助文档
function helping()
{
	echo -e "帮助文档ing...."
	echo "./github.sh new		--创建一个空的本地仓库，并连接到云端仓库。"
	echo "./github.sh up		--更新代码到云端仓库。"
	echo "./github.sh all		--更新代码到所有仓库。"
	echo "./github.sh cr		--chengRemote 修改仓库地址。"
	echo "./github.sh pull		--强制更新代码到本地"
	echo "./github.sh clone	url	--克隆云端代码。"
}



#脚本开始执行
clear 			#清屏
echo -e ${Info}	#打印脚本信息
# u-boot/mk clean	#清除编译文件

if   [ -z ${1} ]; then 
	update ;
	
elif [ ${1} == "new" ]; then 
	CreateRepository ;

elif [ ${1} == "up" ]; then 
	update ;

elif [ ${1} == "all" ]; then 
	updateAll ;

elif [ ${1} == "clone" ]; then 
	cloen ;

elif [ ${1} == "cr" ]; then 	# 更改Remote
	chengRemote $2;

elif [ ${1} == "pull" ]; then 	# 强制更新代码到本地
	git fetch --all
	git reset --hard origin/master 
	
else
	helping ;
fi 





#################################################
#	附录1：git配置
#################################################
# (1) 配置用户名（提交时会引用）
# git config --global user.name “cnj666”			# 如果使用了 --global 选项，那么该命令只需要运行一次
# #请把cnj替换成自己的用户名

# (2) 配置邮箱（提交时会引用）
# git config --global user.email "cnj666@qq.com"	# 如果使用了 --global 选项，那么该命令只需要运行一次

# (3) 其他配置
# git config --global merge.tool “kdiff3”
# #要是没安装KDiff3就不用设这一行

# git config --global core.autocrlf false
# #让Git不要管windows/Unix换行符转换的事

# (4) 编码配置
# git config --global gui.encoding utf-8
# #避免git gui中的中文乱码

# git config --global core.quotepath off
# #避免git status显示的中文文件名乱码

# Windows上还需要配置：
# git config --global core.ignorecase false



# 2、Git ssh key pair配置
# 1、在Linux的命令行下输入以下命令：
# ssh-keygen -t rsa -C “cnjcode@qq.com”

# 2、然后一路回车，不要输入任何密码之类，生成ssh key pair

# 3、ssh-add ~/.ssh/id_rsa

# 4、cat ~/.ssh/id_rsa.pub

# 执行ssh-add时出现Could not open a connection to your authentication agent

# 执行ssh-add ~/.ssh/id_rsa报标题上的错误先执行 eval `ssh-agent`(是~键上的那个`)

# 再执行ssh-add ~/.ssh/id_rsa成功ssh-add -l就有新加的rsa了

# 查看私钥：cat ssh-add ~/.ssh/id_rsa

# 查看公钥：cat ~/.ssh/id_rsa.pub

# 作者：蝌蚪1573
# 链接：https://www.jianshu.com/p/70ff8127ea24
# 来源：简书
# 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。





#################################################
#	附录2：git配置文件说明
#################################################
# Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置：

# 1) /etc/gitconfig 文件: 	包含系统上每一个用户及他们仓库的通用配置。 如果在执行 git config 时带上 --system 选项，那么它就会读写该文件中的配置变量。 
#        					（由于它是系统配置文件，因此你需要管理员或超级用户权限来修改它。）

# 2) ~/.gitconfig 或 ~/.config/git/config 文件：只针对当前用户。 你可以传递 --global 选项让 Git 读写此文件，这会对你系统上 所有 的仓库生效。

# 3) 当前使用仓库的 Git 目录中的 config 文件（即 .git/config）：针对该仓库。 
#			你可以传递 --local 选项让 Git 强制读写此文件，虽然默认情况下用的就是它。。 （当然，你需要进入某个 Git 仓库中才能让该选项生效。）

# 每一个级别会覆盖上一级别的配置，所以 .git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。



# 在 Windows 系统中，Git 会查找 $HOME 目录下（一般情况下是 C:\Users\$USER ）的 .gitconfig 文件。 Git 同样也会寻找 /etc/gitconfig 文件，但只限于 MSys 的根目录下，即安装 Git 时所选的目标位置。 如果你在 Windows 上使用 Git 2.x 以后的版本，那么还有一个系统级的配置文件，Windows XP 上在 C:\Documents and Settings\All Users\Application Data\Git\config ，Windows Vista 及更新的版本在 C:\ProgramData\Git\config 。此文件只能以管理员权限通过 git config -f <file> 来修改。


#################################################
#	附录3：查看git配置
#################################################
# 你可以通过以下命令查看所有的配置以及它们所在的文件：
# git config --list --show-origin
# 如果想要检查你的配置，可以使用 git config --list 命令来列出所有 Git 当时能找到的配置。
# git config <key>： 来检查 Git 的某一项配置 eg:git config user.name



#####################################################################
#	附录4：使用git提交到github,每次都要输入用户名和密码的解决方法
#####################################################################
# 1.查看clone 地址：git remote -v

# 2.移除https的方式，换成 ssh方式
# git remote rm origin

# 3 复制ssh地址 并修改本地地址：git remote add origin git地址

# 4.查看push方式是否修改成功：
# git remote -v

# 5.重新push（提交一下）
# git push origin master

# 参考：https://www.cnblogs.com/sky6862/p/7992736.html


#####################################################################
#	附录5：.gitignore 文件 新增忽略文件并没有生效
#新增的忽略文件没有生效，是因为git是有缓存的，
#而之前的文件在缓存中，并不会清除掉，还会继续提交，所以更新.gitignore文件，要清除缓存文件
#####################################################################
# git rm -r --cached .

# !lib.a# 但lib.a 除外



#####################################################################
#	附录6：git本地管理多个密钥/账户
#####################################################################
# 1.进入到~/.ssh
# cd  ~/.ssh

# 2.生成新的ssh密钥
# ?如果我们电脑上已经存在了一个ssh key，那么我们需要在我们电脑上生成第二个你想在本电脑上使用的id_rsa，
# ?使用命令：?ssh-keygen -t rsa -C "你的github注册邮箱地址"。

# 3.重命名ssh文件夹
# 提示 "Enter file in which to save the key (/c/Users/Y700/.ssh/id_rsa):" 输入文件夹名称 eg:id_rsa_me


# 4.添加新 ssh Key
# 默认SSH只会读取id_rsa，所以为了让SSH识别新的私钥，需要将其添加到SSH agent
# 使用命令：
# ssh-agent bash
# ssh-add ~/.ssh/id_rsa_me

# 5.配置解析方式
# 在~/.ssh目录下新建名称为config的文件（无后缀名）。用于配置多个不同的host使用不同的ssh key
# # gitlab
# Host gitlab.com
#     HostName gitlab.com
#     PreferredAuthentications publickey
#     IdentityFile ~/.ssh/gitlab_id-rsa
# # github
# Host github.com
#     HostName github.com
#     PreferredAuthentications publickey
#     IdentityFile ~/.ssh/github_id-rsa
#   ?
# # 配置文件参数
# # Host : Host可以看作是一个你要识别的模式，对识别的模式，进行配置对应的的主机名和ssh文件
# # HostName : 要登录主机的主机名
# # User : 登录名
# # IdentityFile : 指明上面User对应的identityFile路径



#####################################################################
#	附录7：git https 提交保存密码
#####################################################################
# 1.设置记住密码（默认15分钟）
# 可以将你的密码缓存下来，只用输一次密码，以后都可以不用输入了。缺点就是密码都明文保存在~/.git-credential文件中。
# linux下： git config --global credential.helper cache
# windows下：git config --global credential.helper wincred

# 2.如果想自己设置时间，可以使用以下命令：
# git config credential.helper 'cache --timeout=3600'
# 这样就设置一个小时之后失效

# 3.提交一次后,长期存储密码：
# git config --global credential.helper store

# 4.增加远程地址的时候带上密码也是可以的。(推荐)
# http://yourname:password@git.oschina.net/name/project.git


#####################################################################
#	附录8：git提交后文件夹显示灰色 且无法打开
#####################################################################
# 1.问题原因 :
# 无法点击的灰色文件夹中含有 .git 文件
# 即在本地初始化的仓库(使用 git init的文件夹) 中的某一个文件夹里含有 .git 文件 （有点绕口）
# 这里就是echecs文件夹和echecs_web_services文件夹中原本就含有.git文件,即之前别人使用过git提交代码遗留下来的.git文件

# 2.解决方法 :
# 删除缓存:
# git rm -r --cached "灰色文件夹的名称"            # 操作后gitee上的灰色文件夹被移除
# 这里就是
# git rm -r --cached "echecs"
# git rm -r --cached "echecs_web_services"
# 然后在本地找到灰色文件夹中原本的.git文件手动删掉,注意显示隐藏文件去找
# 然后重新 git add,commit,push 提交代码